﻿using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using BLL;

namespace Web.forms
{
    public partial class Usuarios : Pagina
    {
        protected const string PasswordMask = "***************";

        protected string ReTypedPassword
        {
            get
            {
                if (ViewState["ReTypedPassword"] != null)
                    return Decrypt(Convert.ToString(ViewState["ReTypedPassword"]));

                return null;
            }
            set { ViewState["ReTypedPassword"] = Encrypt(value); }
        }

        protected string TypedPassword
        {
            get
            {
                if (ViewState["TypedPassword"] != null)
                    return Convert.ToString(ViewState["TypedPassword"]);

                return null;
            }
            set { ViewState["TypedPassword"] = value; }
        }


        protected void Page_Load(object sender, EventArgs e)
        {
            if (txtNombreCorto.Text.Trim().Length > 0 && txtClave.Text.Trim().Length > 0 && txtClave.Text != PasswordMask)
            {
                TypedPassword = txtClave.Text;

                txtClave.Attributes.Add("value", TypedPassword);
            }

            if (txtClave2.Text.Trim().Length > 0 && txtClave2.Text != PasswordMask)
            {
                ReTypedPassword = txtClave2.Text;

                txtClave2.Attributes.Add("value", ReTypedPassword);
            }

            if (IsPostBack) return;

            btnNuevo_Click(null, null);
        }

        protected IList<Perfil> ObtenerPerfiles()
        {
            return ObtenerPerfiles(false);
        }

        protected IList<Perfil> ObtenerPerfiles(bool Refrescar)
        {
            if (Refrescar)
                ViewState["Perfiles"] = BLL.Perfiles.ObtenerPerfiles();

            if (ViewState["Perfiles"] == null)
                ViewState["Perfiles"] = BLL.Perfiles.ObtenerPerfiles();

            return ViewState["Perfiles"] as List<Perfil>;
        }

        protected IList<Usuario> ObtenerUsuarios(ref string errMessage)
        {
            return ObtenerUsuarios(false, ref errMessage);
        }

        protected IList<Usuario> ObtenerUsuarios(bool Refrescar, ref string errMessage)
        {
            if (Refrescar)
                ViewState["Usuarios"] = BLL.Usuarios.ObtenerUsuarios(ref errMessage);

            if (ViewState["Usuarios"] == null)
                ViewState["Usuarios"] = BLL.Usuarios.ObtenerUsuarios(ref errMessage);

            return ViewState["Usuarios"] as List<Usuario>;
        }

        protected void CargaUsuarios(ref string errMessage)
        {
            CargaUsuarios(ref grvUsuarios, ObtenerUsuarios(true, ref errMessage));
        }

        protected static void CargaUsuarios(ref GridView gv, object tbl)
        {
            gv.DataSource = tbl;
            gv.DataBind();
        }

        protected void grvUsuarios_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                if (e.Row.RowIndex == 0)
                    e.Row.Style.Add("height", "50px");

                return;
            }

            if (e.Row.FindControl("Btn_Delete") == null) return;

            if (e.Row.FindControl("txtNombreCorto") == null) return;

            var tmpNombreCorto = ((Label) e.Row.FindControl("grvUsuarios_lblNombreCorto")).Text;

            var btnDel = ((ImageButton) e.Row.FindControl("Btn_Delete"));

            btnDel.Attributes.Add("onclick",
                                  "$(document).ready(function () { $.prompt(\"¿Desea eliminar el usuario '" +
                                  tmpNombreCorto +
                                  "'?\", { buttons: { \"Sí, continúe\": true, \"No, Cancelar\": false }, submit: {} }); });");
            ddlLideres.Items.FindByValue(((Label)e.Row.FindControl("grvUsuarios_lblLider")).Text);
        }

        protected void grvUsuarios_SelectedIndexChanged(object sender, EventArgs e)
        {
            lblUserId.Text = ((Label)grvUsuarios.SelectedRow.FindControl("grvUsuarios_lblUserId")).Text;
            txtNombreCorto.Text = ((Label)grvUsuarios.SelectedRow.FindControl("grvUsuarios_lblNombreCorto")).Text;
            txtNombreCorto.Enabled = false;

            txtNombreCompleto.Text = ((Label)grvUsuarios.SelectedRow.FindControl("grvUsuarios_lblNombreCompleto")).Text;
            txtClave.Attributes.Add("value", PasswordMask);
            txtClave2.Attributes.Add("value", PasswordMask);

            if (ddlPerfil.Items.FindByText(((Label)grvUsuarios.SelectedRow.FindControl("grvUsuarios_lblGlosaPerfil")).Text) == null)
                return;

            ddlPerfil.SelectedIndex = -1;
            ddlPerfil.Items.FindByText(((Label)grvUsuarios.SelectedRow.FindControl("grvUsuarios_lblGlosaPerfil")).Text).Selected =
                true;

            // ddlPerfil_SelectedIndexChanged(null, null);

            txtClave.Enabled = false;
            txtClave2.Enabled = false;
            lbCambiarClave.Visible = true;

            txtNombreCorto.Focus();

        }

        protected void grvUsuarios_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            if (e.CommandName != "Eliminar") return;

            if (Convert.ToInt32(e.CommandArgument) == UsuarioID)
                PopUpMessage("Imposible eliminar al usuario, ya que se encuentra conectado en esta sesión.-");
            else
            {
                var usrTmp = new BLL.Usuarios();

                if (!usrTmp.EliminarUsuario(Convert.ToInt32(e.CommandArgument)))
                    PopUpMessage(usrTmp.Mensaje);
                else
                    btnNuevo_Click(null, null);
            }
        }

        protected void CargaPerfiles()
        {
            Util.Common.CargaDropDownList(ref ddlPerfil, ObtenerPerfiles(true), "Glosa", "PerfilId", "Seleccione Perfil");
        }

        /*
        protected void ddlPerfil_SelectedIndexChanged(object sender, EventArgs e)
        {
            // -- Perfil de Usuario
            if (Convert.ToInt16(ddlPerfil.SelectedItem.Value) != 4) return;

            lblLideres.Visible = true;
            ddlLideres.Visible = true;

            ddlLideres.Items.Clear();

            ddlLideres.Items.Add(new ListItem("SELECCIONE LIDER", "-99"));

            var tmpListaUsuarios = ObtenerUsuarios(true);

            foreach (var usrTmp in tmpListaUsuarios)
            {
                if (usrTmp.PerfilId == 3 || usrTmp.PerfilId == 2) continue;

                ddlLideres.Items.Add(new ListItem(usrTmp.PerfilId == 3 ? "(E)" : "(I)" + " " + usrTmp.NombreCompleto, usrTmp.UserId.ToString()));
            }
        }
        */

        protected void btnNuevo_Click(object sender, EventArgs e)
        {
            var errMessage = "";

            TypedPassword = null;
            ReTypedPassword = null;

            ClearControls();

            CargaUsuarios(ref errMessage);

            if (!string.IsNullOrEmpty(errMessage))
                PopUpMessage(errMessage);
            else
            {
                CargaPerfiles();

                lblUserId.Text = "-999";
                lbCambiarClave.Visible = false;

                txtNombreCorto.Focus();

                lblLideres.Visible = false;
                ddlLideres.Visible = false;
            }
        }

        protected void lbCambiarClave_Click(object sender, EventArgs e)
        {
            txtClave.Enabled = true;
            txtClave.Text = string.Empty;
            txtClave.Focus();

            txtClave2.Enabled = true;
            txtClave2.Text = string.Empty;
        }

        protected void btnGrabar_Click(object sender, EventArgs e)
        {
            var msg = "";

            if (txtNombreCorto.Text.Length <= 0)
                msg = "Ingrese Login";
 
            if (txtNombreCompleto.Text.Length <= 0)
                msg = msg + "<br />Ingrese Nombre Completo";

            if (txtClave.Enabled && txtClave2.Enabled)
            {
                if (txtClave.Text.Length <= 0)
                    msg = msg + "<br />Ingrese Clave";

                if (txtClave2.Text.Length <= 0)
                    msg = msg + "<br />Reingrese Clave";

                if (txtClave.Text.Length > 0 && txtClave2.Text.Length > 0)
                    if (!txtClave2.Text.Equals(txtClave.Text))
                        msg = msg + "<br />La clave no coincide";
            }

            if (Convert.ToInt32(ddlPerfil.SelectedValue) == -999)
                msg = msg + "<br />Seleccione Perfil";
/*
            else
            { 
                if (Convert.ToInt16(ddlPerfil.SelectedItem.Value).Equals(4) && Convert.ToInt32(ddlLideres.SelectedValue) == -99)
                    msg = msg + "<br />Seleccione Líder asociado";
               
            }
*/
            if (msg.Length > 0)
            {
                PopUpMessage(msg);
                return;
                
            }

            var objUsuario = new Usuario
                                 {
                                     UserId = Convert.ToInt32(lblUserId.Text),
                                     NombreCorto = txtNombreCorto.Text,
                                     NombreCompleto = txtNombreCompleto.Text,
                                     Clave = Encrypt(txtClave.Text),
                                     PerfilId = Convert.ToInt32(ddlPerfil.SelectedValue)
                                 };


            if (ddlLideres.SelectedItem != null)
                objUsuario.SetLider(Convert.ToInt32(ddlLideres.SelectedValue));
            else
                objUsuario.SetLider(null);

            if (lblUserId.Text.Equals("-999"))
            {
                var usrTmp = new BLL.Usuarios();

                PopUpMessage(!usrTmp.GrabarUsuario(objUsuario, PeriodoActual.Llave) ? usrTmp.Mensaje : "El usuario ha sido registrado exitosamente.-");
            }
            else
            {
                if (!txtClave.Enabled && !txtClave2.Enabled)
                    objUsuario.Clave = null;

                var usrTmp = new BLL.Usuarios();

                PopUpMessage(!usrTmp.ActualizarUsuario(objUsuario) ? usrTmp.Mensaje : "La información del usuario ha sido modificada exitosamente.-");
            }

            btnNuevo_Click(null, null);
        }   
    }
}
